.. :validated: 3.2.0

Управление системными учетными записями
======================================================

Введение
---------------------------------------------------------------------------------

Инструкция предназначена для предоставления информации о безопасном и корректном механизме управления системными учетными записями, используемыми для работы **ALD Pro**.

Термины и определения
---------------------------------------------------------------------------------

- **Контроллер домена** (КД) - сервер, который контролирует определенную область компьютерной сети, а также управляет доступом к различным ресурсам внутри этой области.

- **Служба каталога** - средство иерархического представления ресурсов и информации об этих ресурсах.

- **Lightweight Directory Access Protocol** (LDAP) - протокол прикладного уровня для доступа к службе каталогов, разработанный как облегчённый вариант протокола **DAP**. **LDAP** — относительно простой протокол, использующий **TCP/IP** и позволяющий производить операции аутентификации (bind), поиска (search) и сравнения (compare), а также операции добавления, изменения или удаления записей.

- **Free Identity Policy and Audit** (FreeIPA) - открытое программное обеспечение, специализированная служба каталогов, предназначенная для создания в ОС **Linux** среды, позволяющей централизованно управлять аутентификацией пользователей, устанавливать политики доступа и аудита. Функционал **FreeIPA** подобен **Active Directory**, используемому в **Windows**.

- **389 Directory Server** (389 DS) - служба каталогов уровня предприятия с открытым исходным кодом, предназначенная для централизованного управления доступом к ресурсам на множестве сетевых серверов. 

- **Системная учетная запись** (Системная УЗ) - под системными учетными записями понимаются записи службы каталога, находящиеся в контейнере ``cn=sysaccounts,cn=ipa,dc={domain_component}``, а также специальные учетные записи **PostgreSQL**, **RabbitMQ**, **Zabbix**, **Grafana**, используемые **ALD Pro** для выполнения различных действий, не связанных с действиями пользователей системы. Эти учетные записи не предназначены для обычных пользователей и обеспечивают функционирование различных сервисов и ролей внутри инфраструктуры, поддерживая безопасность и доступ в системе на уровне домена.

- **Secure Shell** (SSH) - сетевой протокол прикладного уровня, позволяющий производить удалённое управление операционной системой и туннелирование **TCP**-соединений.

- **Samba** - пакет программ, которые позволяют обращаться к сетевым дискам и принтерам на различных операционных системах по протоколу **SMB/CIFS**.

- **Domain Name System** (DNS) - система доменных имён — это иерархическая децентрализованная система именования для ресурсов, подключённых к глобальной сети, которая ведёт список доменных имён вместе с их числовыми IP-адресами или местонахождениями.

- **Kerberos** - сетевой протокол аутентификации, который предлагает механизм взаимной аутентификации клиента и сервера перед установлением связи между ними. **Kerberos** выполняет аутентификацию в качестве службы аутентификации доверенной третьей стороны, используя криптографический ключ. **Kerberos** построен на криптографии симметричных ключей и требует наличия центра распределения ключей. Расширения **Kerberos** могут обеспечить использование криптографии с открытым ключом на определённых этапах аутентификации.

- **Internet Protocol** (IP) - маршрутизируемый протокол сетевого уровня стека **TCP/IP**.

- **Transmission Control Protocol** (TCP) - протокол управления передачей - протокол сети интернет, который позволяет двум хостам создать соединение и обмениваться потоками данных. **TCP** гарантирует доставку данных и пакетов в том же порядке, в котором они были отправлены.

- **IP-адрес** - уникальный числовой идентификатор устройства в компьютерной сети, работающей по протоколу **IP**.

- **Аccess control instruction** (ACI) - инструкция управления доступом, которая определяет, кто или что может получать доступ к объекту (программе, процессу или файлу), и какие именно операции разрешено или запрещено выполнять субъекту (пользователю, группе пользователей).

Общий алгоритм смены учетных данных для системных учетных записей в 389 DS
---------------------------------------------------------------------------------

Общее описание
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

В **ALD Pro** используются системные учетные записи для различных целей, связанных с управлением внутренними сервисами, выполнением различных служебных операций, управлением инфраструктурой безопасности и аутентификацией. Эти учетные записи хранятся в контейнере ``cn=sysaccounts,cn=etc`` базы данных **LDAP**, которая управляется с помощью одного из компонентов **FreeIPA** — ``389 Directory Server (389 DS)``. Этот контейнер является частью структуры службы каталога, и его основная роль заключается в хранении специальных учетных записей, которые необходимы для работы сервисов и выполнения административных задач.

Смена учетных данных для системных учетных записей должна проводиться очень осторожно, поскольку эти учетные записи используются как самой службой **FreeIPA**, так и внешними приложениями или сервисами для доступа к базе данных **LDAP** или другим сервисам в инфраструктуре. Это важно, поскольку нужно убедиться, что после учетных данных внешние приложения продолжат корректно работать.

Идентификация учетных записей и их использования
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Перед операциями над системными УЗ необходимо определить, какие внешние приложения или сервисы используют эти системные учетные записи. Это могут быть:

- различные сервисы из состава **ALD Pro**;
- сервис репликации между серверами **FreeIPA**;
- система для управления сертификатами;
- программы для интеграции с **Active Directory**;
- службы аутентификации через **LDAP** или **Kerberos**;
- другие сервисы, которые подключаются под системными учетными записями, используют **LDAP** для своих нужд и функционируют в текущей инфраструктуре.

Подготовка к смене учетных данных для системных учетных записей
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Перед сменой учетных данных необходимо выполнить следующие действия:

- убедиться, что существуют рабочие резервные копии конфигураций всех внешних приложений, которые используют эти учетные записи;
- оповестить ответственных за приложения или службы, использующие эти учетные записи, о предстоящей смене учетных данных, чтобы была возможность подготовиться к обновлению в своих конфигурациях (для сервисов и приложений, которые используют службу каталогов, но не входят в комплект поставки **ALD Pro**);
- проверить настройки конфигурации в самих внешних приложениях, чтобы удостовериться, что они могут работать с новыми учетными данными.

Обновление конфигурации внешних приложений
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

После того как учетные данные для системных учетных записей в службе каталога были изменены, необходимо обновить их в конфигурациях внешних приложений, которые используют эти учетные записи для подключения к **LDAP** или другим сервисам.

В зависимости от того, какие внешние сервисы используют системные учетные записи, нужно будет обновить конфигурацию подключения в каждом приложении.

1. Для сервисов, использующих **LDAP**, таких как приложения, которые подключаются к **389 DS** из состава **FreeIPA** для аутентификации, обновить файл конфигурации **LDAP**, где прописаны учетные данные (или тот контейнер, откуда эти сервисы получают данные для аутентификации в **LDAP**). Внести изменения в конфигурационные файлы (контейнеры) каждого такого сервиса.

2. Для **Kerberos**: Если системные учетные записи используются для аутентификации через **Kerberos**, обновить принципал **Kerberos**. Например:

- ``kadmin.local -q "changepw some_kerberos_service"``

    Если это сервисный принципал, то, возможно, потребуется перезапуск служб, использующих **Kerberos**.

3. Если внешнее приложение использует учетную запись для других сервисов, например, для генерации сертификатов или управления политиками, необходимо убедиться, что данные обновлены в конфигурации этих сервисов. Например:

- для ``ipa-certmaster``: обновить конфигурационные файлы и убедиться, что процесс управления сертификатами будет продолжать работать;
- для ``ipa-otpd``: проверить, что изменения не повлияют на систему One-Time Password.

Перезапуск служб и тестирование работоспособности
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

После изменения учетных данных и обновления конфигураций приложений необходимо:

1. Перезапустить все сервисы, которые используют эти учетные записи. Это может включать:

- **FreeIPA** (**IPA** сервисы);
- **389 DS** (служба **LDAP**);
- службы репликации;
- сервисы, использующие **Kerberos** или **Sudo**;
- другие связанные сервисы и приложения.

2. Провести тестирование, чтобы убедиться, что все сервисы, использующие эти учетные записи, продолжают функционировать правильно. Это можно сделать, проверив подключение к **LDAP**, а также тестируя репликацию, аутентификацию пользователей и доступ к другим сервисам.

Мониторинг дальнейшей работы сервисов, использующих в своей работе системные учетные записи
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

После смены учетных данных и обновления конфигураций важно мониторить систему, чтобы убедиться, что нет сбоев или ошибок, связанных с неправильными учетными данными. Рекомендуется протестировать изменения в контролируемой среде перед их внедрением в рабочую инфраструктуру. Кроме того, необходимо иметь четкий план восстановления, чтобы оперативно устранить возможные ошибки в случае возникновения непредвиденных обстоятельств.

Управление системными учетными записями, используемыми ALD Pro, при работе с одной версией продукта
-----------------------------------------------------------------------------------------------------------------------------------------------------------------

Общее описание
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Системные учетные записи создаются автоматически при установке и настройке **ALD Pro** (также при настройке интеграции с **RuPost**) и не предназначены для обычного использования конечными пользователями.

Доступ системных учетных записей из ветки ``cn=sysaccounts,cn=etc`` к данным службы каталога настраивается с помощью **ACI** и механизма ролей/привилегий/разрешений **ALD Pro**, которые определяют, какие операции могут быть выполнены на уровне данных **LDAP**. Предустановленные в **ALD Pro** системные учетные записи настроены с такими ограничениями, которые обеспечивают безопасность и контролируют доступ к критически важным данным, обеспечивая правильную работу тех прикладных сервисов, которые подключаются к службе каталога под данными учетными записями.

Смена учетных данных для системных учетных записей должна проводиться крайне осторожно, поскольку эти учетные записи используются внешними приложениями или сервисами для доступа к базе данных **LDAP** или другим сервисам в инфраструктуре **ALD Pro**. Важно убедиться, что после смены учетных данных все компоненты **ALD Pro** и другие внешние приложения инфраструктуры продолжат корректно работать. Смена учетных данных для системных учетных записей, которые не хранятся в базе данных службы каталога, а используются для работы с другими внешними относительно **ALD Pro** продуктами (например, **Zabbix**, **PostgreSQL**), описана ниже.

Проверка репликации данных между экземплярами 389 Directory Server
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Перед началом работы с системными учетными записями важно убедиться, что репликация данных работает корректно. Проверить состояние репликации с помощью следующих команд с выводом информации о состоянии в формате JSON:

.. code-block:: bash

  dsconf -j <INSTANCE> replication status --suffix <SUFFIX>

где ``<INSTANCE>`` - имя экземпляра службы каталога, а ``<SUFFIX>`` - доменный суффикс. Для получения списка ``<INSTANCE>`` можно воспользоваться командой ``dsctl -l``.

Например:

.. code-block:: bash

  dsconf -j EXAMPLE-RU replication status --suffix dc=example,dc=ru

Если в результате команды выдается ответ в формате JSON со следующей парой ключ-значение: 

.. code-block:: bash

  {
  "desc": "No object exists given the filter criteria..."
  }

это означает, что репликация в данный момент не найдена или некорректно заданы условия для команды. Необходимо убедиться в том, что в портале управления **ALD Pro** в подразделе **Управление доменом** → **Сайты и службы**, на вкладке **Соглашения о репликации** присутствуют данные о репликации.

Проверить состояние репликации между серверами можно с помощью утилиты ``ds-replcheck``:

.. code-block:: bash

  ds-replcheck online -D "cn=Directory Manager" -m ldap://dc-1.ald.company.local:389 -r ldap://dc-2.ald.company.local:389 -b dc=ald,dc=company,dc=local

В случае отсутствия команды ``dsconf`` на конкретном КД, следует установить ее следующей командой:

.. code-block:: bash

  sudo apt-get install python3-lib389

Управление системными учетными записями
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

К системным учетным записям, используемым для обеспечения корректной и бесперебойной работы **ALD Pro**, относятся следующие записи (по умолчанию при установке продукта находятся в файлах конфигурации **ALD Pro**):

.. list-table::
   :header-rows: 1
   :widths: 30 30 20 20
   :class: longtable

   * - Системная УЗ
     - Описание
     - Подсистема
     - Компонент
   * - ::
   
        uid=aldpro_srv_zabbix,cn=sysaccounts,cn=etc,$SUFFIX
     - Системная учетная запись для обеспечения аутентификации с системой мониторинга **Zabbix**. С версии 3.1.0 не используется сервисами **ALD Pro**.
     - КД
     - 389 DS
   * - ::
    
        uid=commonenv,cn=sysaccounts,cn=etc,$SUFFIX
     - Системная учетная запись для чтения переменных окружения, используемых различными сервисами. С версии 3.1.0 не используется сервисами **ALD Pro**.
     - КД
     - 389 DS
   * - ::
    
        uid=orgunitsservice,cn=sysaccounts,cn=etc,$SUFFIX
     - Системная учетная запись управления организационными подразделениями.
     - КД
     - 389 DS
   * - ::
        
        uid=roleservice,cn=sysaccounts,cn=etc,$SUFFIX
     - Системная учетная запись для управления ролями и правами доступа.
     - КД
     - 389 DS
   * - ::
    
        uid=saltstackservice,cn=sysaccounts,cn=etc,$SUFFIX
     - Системная учетная запись системы управления конфигурациями **SaltStack**, используемая для автоматизированного развертывания и настройки компонентов или объектов каталога.
     - КД
     - 389 DS
   * - ::
    
        uid=simple_repo,cn=sysaccounts,cn=etc,$SUFFIX
     - Системная учетная запись для подсистемы репозиториев. Используется для доступа к ipaSshPubKey.
     - КД
     - 389 DS
   * - ::
    
        uid=syncer/dc01.example.ru@EXAMPLE.RU,cn=sysaccounts,cn=etc,$SUFFIX
     - Системная учетная запись, обеспечивающая синхронизацию данных **MS AD** с указанным сервером. В рамках текущей архитектуры модуль синхронизации функционирует на первом контроллере домена, что обусловливает корректность возможного отсутствия системных учетных записей **Syncer** на репликах КД.
     - КД
     - 389 DS
   * - ::
    
        uid=trustsservice,cn=sysaccounts,cn=etc,$SUFFIX
     - Системная учетная запись сервиса управления доверительными отношениями между доменами.
     - КД
     - 389 DS
   * - ::
   
        async_db
     - Системная учетная запись, предназначенная для асинхронных операций с базой данных (фоновые задачи, обработка очередей или отложенные транзакции). Обеспечивает выполнение запросов без блокировки основного потока обработки данных.
     - КД
     - PostgreSQL
   * - ::
   
        core_db
     - Системная учетная запись портала управления **ALD Pro**, используемая системными процессами для доступа к базе данных.
     - КД
     - PostgreSQL
   * - ::
   
        syncer_db
     - Системная учетная запись, ответственная за синхронизацию данных между **PostgreSQL** и другими системами (например, **LDAP**-каталогом). Обеспечивает поддержание консистентности данных.
     - КД
     - PostgreSQL
   * - ::
   
        repo_db
     - Системная учетная запись для управления данными в репозиториях.
     - Репозиториии ПО
     - PostgreSQL
   * - ::
   
        osinstall_db
     - Системная учетная запись сервиса сетевой установки ОС, ответственная за хранение и обработку конфигураций **PXE**.
     - Установка ОС по сети
     - PostgreSQL
   * - ::
   
        zabbix
     - Системная учетная запись службы мониторинга **Zabbix**, предназначенная для сбора метрик производительности, хранения исторических данных и обработки триггеров. С версии 3.1.0 не использует пароль, подключение ведется по сокету.
     - Мониторинг
     - PostgreSQL
   * - ::
   
        async_rabbitmq
     - Системная учетная запись для асинхронных операций взаимодействия портала управления **ALD Pro**.
     - КД
     - RabbitMQ
   * - ::
   
        core_rabbitmq
     - Системная учетная запись для основных операций портала управления **ALD Pro** брокера сообщений. 
     - КД
     - RabbitMQ
   * - ::
   
        repo_rabbitmq
     - Системная учетная запись для управления сообщениями в системе репозиториев.
     - Репозиториии ПО
     - RabbitMQ
   * - ::
   
        osinstall_rabbitmq
     - Системная учетная запись для сетевой установки ОС.
     - Установка ОС по сети
     - RabbitMQ
   * - ::
   
        monitoring
     - Системная учетная запись для отображения данных мониторинга в портале управления.
     - Мониторинг
     - Zabbix
   * - ::
   
        zabbix_api
     - Системная учетная запись для загрузки шаблонов и интеграции с **Grafana**.
     - Мониторинг
     - Zabbix
   * - ::
   
        admin (Grafana)
     - Системная учетная запись для загрузки дашбордов и настройки интеграции с **Zabbix**. В указанных операциях для корректной настройки используется системная учетная запись **Grafana**, предопределенная в конфигурации ``grafana.ini``. Данная учетная запись после установки подсистемы может быть заменена.
     - Мониторинг
     - Grafana

Также стоит учитывать, что при обновлении с младших версий, в списке системных УЗ будут присутствовать устаревшие системные записи для обеспечения обратной совместимости, в том числе в назначенных ``aci`` и атрибутах ``member`` необходимых ролей/привилегий/разрешений, которые возможно заблокировать или удалить после корректного обновления всех подсистем.

.. important::

    Системные УЗ уникальны для каждой подсистемы и КД, поэтому имя УЗ формируется по шаблону ``<system_account_name>_<api/db/rabbitmq>_<short_hostname>``, например, ``saltstackservice_dc01`` или ``core_db_dc01``.

Управление системными учетными записями 389 Directory Server, используемыми для работы ALD Pro
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Управление системными учетными записями 389 DS
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Системные учетные записи **389 Directory Server** зачастую необходимы для интеграций со сторонними приложениями и службами, которые поддерживают **LDAP**-аутентификацию. Управление системными **УЗ 389 DS** производится встроенными командами администрирования **LDAP**-каталога, более подробную информацию о которых возможно найти в справочной документации **LDAP/389 DS**.

Процесс создания системной учетной записи предполагает использование утилиты ``ldapadd`` с аутентификацией под учетной записью администратора, имеющим соответствующие права на контейнер ``cn=sysaccounts``. Необходимо сформировать **LDIF**-документ, содержащий атрибуты: ``objectClass`` (``account``, ``nsMemberOf`` (опционально, зависит от необходимости назначения роли для УЗ), ``simplesecurityobject``, ``top``), ``userPassword`` и ``uid``. Пароль должен быть хешированным, однако на практике допускается использование открытого текста с последующим автоматическим хешированием сервером:

.. code-block:: bash
  
  ldapadd -x -D "cn=Directory Manager" -W <<EOF
  dn: uid=system_account,cn=sysaccounts,cn=etc,dc=example,dc=ru
  objectClass: account
  objectClass: nsMemberOf
  objectClass: simplesecurityobject
  objectClass: top
  uid: system_account
  userPassword: password_string
  EOF

Для изменения атрибутов существующей системной учетной записи применяется утилита ``ldapmodify``. Наиболее частые операции включают смену пароля, добавление членства в группах через механизм ``nsMemberOf``. При смене пароля рекомендуется использовать метод замены ``(changetype: modify)`` с операцией ``replace``:

.. code-block:: bash

  ldapmodify -x -D "cn=Directory Manager" -W <<EOF
  dn: uid=system_account,cn=sysaccounts,cn=etc,dc=example,dc=ru
  changetype: modify
  replace: userPassword
  userPassword: password_string
  EOF

Права доступа для системных учетных записей могут назначаться как через стандартные механизмы ролевого доступа, так и через прямые назначения **ACI**. Рекомендуется использовать подход с правами через роли и привилегии, так как назначение **ACI** на конкретную системную учетную запись в дальнейшем приведет к сложности поддержки согласованности и консистентности информации о контроле доступа.

Назначение ролей/привилегий/разрешений осуществляется через атрибут ``member``:

.. code-block:: bash

  ldapmodify -x -D "cn=Directory Manager" -W <<EOF
  dn: cn=<role_name>,cn=roles,cn=accounts,dc=example,dc=ru
  changetype: modify
  replace: member
  member: uid=<system_account>,cn=sysaccounts,cn=etc,dc=example,dc=ru
  EOF

Прямое создание **ACI** для системной учетной записи требует добавления записей контроля доступа в точку привязки **ACI**. Например, для предоставления прав на чтение всех записей в определенном поддереве ``(cn=sysaccounts)``:

.. code-block:: bash

  ldapmodify -x -D "cn=Directory Manager" -W <<EOF
  dn: cn=sysaccounts,cn=etc,dc=example,dc=ru
  changetype: modify
  add: aci
  aci: (targetattr="*")(version 3.0; acl "System Account Access"; allow (read, search, compare) userdn="ldap:///uid=system_account,cn=sysaccounts,cn=etc,dc=example,dc=ru";)
  EOF

Удаление системных учетных записей выполняется с помощью утилиты ``ldapdelete``. Перед удалением необходимо убедиться, что учетная запись не используется какими-либо службами или приложениями, а также проверить и удалить все связанные **ACI**:

.. code-block:: bash

  ldapdelete -x -D "cn=Directory Manager" -W "uid=system_account,cn=sysaccounts,cn=etc,dc=example,dc=ru"

Полное удаление **ACI** записи применяется когда **ACI** существует исключительно для предоставления прав целевой системной учетной записи и не содержит других субъектов доступа:

.. code-block:: bash

  ldapmodify -x -D "cn=Directory Manager" -W <<EOF
  dn: cn=sysaccounts,cn=etc,dc=example,dc=ru
  changetype: modify
  delete: aci
  aci: (targetattr="*")(version 3.0; acl "System Account Access"; 
  allow (read, search, compare) 
  userdn="ldap:///uid=system_account,cn=sysaccounts,cn=etc,dc=example,dc=ru";)
  EOF

Если системная учетная запись включена в группу, которая упомянута в **ACI**, необходимо изменить сам **ACI**, либо модифицировать состав группы:

.. code-block:: bash

  ldapmodify -x -D "cn=Directory Manager" -W <<EOF
  dn: cn=service_group,cn=groups,cn=accounts,dc=example,dc=ru
  changetype: modify
  delete: member
  member: uid=system_account,cn=sysaccounts,cn=etc,dc=example,dc=ru
  EOF 

При возникновении проблем с аутентификацией системных учетных записей следует проверить:

- корректность пароля;
- наличие необходимых **ACI** для доступа к целевым ресурсам;
- отсутствие конфликтующих правил доступа;
- соответствие DN учетной записи в **ACI** и фактическому DN.

Для отладки возможно использовать утилиту ``ldapsearch`` и анализ журналов доступа ``Directory Server``.

Переопределение системных УЗ 389 DS
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

В этом разделе описана замена учетных данных для всех системных учетных записей, расположенных в ``cn=sysaccounts,cn=etc,dc=example,dc=ru``.

.. important::

    Изменение учетных данных для системной учетной записи в **389 DS** приведет к прекращению работы всех сервисов, использующих данную учетную запись, до обновления их конфигураций с новыми данными и последующего перезапуска. В связи с этим после введения изменений из данного раздела, некоторые функции **ALD Pro** могут стать недоступны до корректировки в конфигурационных файлах продукта и перезапуска сервера Apache.

.. note::

    При создании пароля для учетной записи можно использовать ``a-z``, ``A-Z``, ``0-9``.

Для того, чтобы выполнить замену системной УЗ необходимо создать аналогичную учетную запись:

.. list-table::
   :header-rows: 1
   :widths: 30 70
   :class: longtable

   * - Системная УЗ
     - Создание УЗ для замены
   * - ::

        uid=orgunitsservice_*,cn=sysaccounts,cn=etc,$SUFFIX
     - Создать новую учетную запись, которая заменит неактуальную:
      
        .. code-block:: bash

          ldapadd -x -D "cn=Directory Manager" -W <<EOF
          dn: uid=<new_orgunitsservice>,cn=sysaccounts,cn=etc,dc=example,dc=ru
          objectClass: account
          objectClass: nsMemberOf
          objectClass: simplesecurityobject
          objectClass: top
          userPassword: {newOrgunitsservicePassword}
          EOF
        
   * - ::

        uid=orgunitsservice_*,cn=sysaccounts,cn=etc,$SUFFIX
     - Выдать права новой системной УЗ:

        .. code-block:: bash

          ldapmodify -x -D "cn=Directory Manager" -W <<EOF
          dn: cn=orgunitservice managers,cn=sysaccounts,cn=etc,dc=example,dc=ru
          changetype: modify
          replace: member
          member: uid=<new_orgunitsservice>,cn=sysaccounts,cn=etc,dc=example,dc=ru
          EOF

   * - ::
    
        uid=roleservice_*,cn=sysaccounts,cn=etc,$SUFFIX
     - Создать новую учетную запись, которая заменит неактуальную:

        .. code-block:: bash

          ldapadd -x -D "cn=Directory Manager" -W <<EOF
          dn: uid=<new_roleservice>,cn=sysaccounts,cn=etc,dc=example,dc=ru
          objectClass: account
          objectClass: nsMemberOf
          objectClass: simplesecurityobject
          objectClass: top
          userPassword: {newRoleservicePassword}
          EOF

   * - ::
    
        uid=roleservice_*,cn=sysaccounts,cn=etc,$SUFFIX
     - Выдать права новой системной УЗ:

        .. code-block:: bash

          ldapmodify -x -D "cn=Directory Manager" -W <<EOF
          dn: cn=roleservice managers,cn=sysaccounts,cn=etc,dc=example,dc=ru
          changetype: modify
          replace: member
          member: uid=<new_roleservice>,cn=sysaccounts,cn=etc,dc=example,dc=ru
          EOF

   * - ::
    
        uid=saltstackservice_*,cn=sysaccounts,cn=etc,$SUFFIX
     - Создать новую учетную запись, которая заменит неактуальную:

        .. code-block:: bash

          ldapadd -x -D "cn=Directory Manager" -W <<EOF
          dn: uid=<new_saltstackservice>,cn=sysaccounts,cn=etc,dc=example,dc=ru
          objectClass: account
          objectClass: nsMemberOf
          objectClass: simplesecurityobject
          objectClass: top
          userPassword: {newSaltstackservicePassword}
          EOF
        
   * - ::

        uid=saltstackservice_*,cn=sysaccounts,cn=etc,$SUFFIX
     - Выдать права новой системной УЗ:

        .. code-block:: bash

          ldapmodify -x -D "cn=Directory Manager" -W <<EOF
          dn: cn=saltstackservice managers,cn=sysaccounts,cn=etc,dc=example,dc=ru
          changetype: modify
          replace: member
          member: uid=<new_saltstackservice>,cn=sysaccounts,cn=etc,dc=example,dc=ru
          EOF

   * - ::
    
        uid=trustsservice_*,cn=sysaccounts,cn=etc,$SUFFIX
     - Создать новую учетную запись, которая заменит неактуальную:

        .. code-block:: bash

          ldapadd -x -D "cn=Directory Manager" -W <<EOF
          dn: uid=<new_trustsservice>,cn=sysaccounts,cn=etc,dc=example,dc=ru
          objectClass: account
          objectClass: nsMemberOf
          objectClass: simplesecurityobject
          objectClass: top
          userPassword: {newTrustsservicePassword}
          EOF

   * - ::
    
        uid=trustsservice_*,cn=sysaccounts,cn=etc,$SUFFIX
     - Выдать права новой системной УЗ:

        .. code-block:: bash

          ldapmodify -x -D "cn=Directory Manager" -W <<EOF
          dn: cn=trustservice managers,cn=sysaccounts,cn=etc,dc=example,dc=ru
          changetype: modify
          replace: member
          member: uid=<new_trustsservice>,cn=sysaccounts,cn=etc,dc=example,dc=ru
          EOF

   * - ::
    
        uid=syncer/dc01.example.ru@EXAMPLE.RU,cn=sysaccounts,cn=etc,$SUFFIX
     - Создать новую учетную запись, которая заменит неактуальную:

        .. code-block:: bash

          ldapadd -x -D "cn=Directory Manager" -W <<EOF
          dn: uid=<newsyncer/dc01.example.ru@EXAMPLE.RU>,cn=sysaccounts,cn=etc,dc=example,dc=ru
          objectClass: account
          objectClass: krbPrincipal
          objectClass: krbPrincipalAux
          objectClass: krbTicketPolicyAux
          objectClass: nsMemberOf
          objectClass: simplesecurityobject
          objectClass: top
          userPassword: {newsyncer/domain@REALM_password}
          krbPwdPolicyReference: cn=Default System Accounts Password Policy,cn=sysaccounts,cn=etc,dc=example,dc=ru
          krbPrincipalName: <newsyncer/dc01.example.ru@EXAMPLE.RU>
          EOF

   * - ::
    
        uid=syncer/dc01.example.ru@EXAMPLE.RU,cn=sysaccounts,cn=etc,$SUFFIX
     - Выдать права новой системной УЗ:

        .. code-block:: bash

          ldapmodify -x -D "cn=Directory Manager" -W <<EOF
          dn: cn=ALDPRO - Main Administrator,cn=roles,cn=accounts,dc=example,dc=ru
          changetype: modify
          replace: member
          member: uid=<newsyncer/dc01.example.ru@EXAMPLE.RU>,cn=sysaccounts,cn=etc,dc=example,dc=ru
          EOF

       Актуализировать учетные данные для подключения к контроллеру **ALD** во вкладке: **Модуль синхронизации / Настройки / Контроллеры домена ALD**.
   * - ::
    
        uid=simple_*,cn=sysaccounts,cn=etc,$SUFFIX
     - Создать новую учетную запись, которая заменит неактуальную:

       .. code-block:: bash

          ldapadd -x -D "cn=Directory Manager" -W <<EOF
          dn: uid=<new_simple_repo>,cn=sysaccounts,cn=etc,dc=example,dc=ru
          objectClass: account
          objectClass: nsMemberOf
          objectClass: simplesecurityobject
          objectClass: top
          userPassword: {newSimpleRepoPassword}
          EOF

   * - ::
    
        uid=simple_*,cn=sysaccounts,cn=etc,$SUFFIX
     - Выдать права новой системной УЗ:

        .. code-block:: bash

          ldapmodify -x -D "cn=Directory Manager" -W <<EOF
          dn: cn=repo ssh key managers,cn=sysaccounts,cn=etc,dc=example,dc=ru
          changetype: modify
          replace: member
          member: uid=<new_simple_repo>,cn=sysaccounts,cn=etc,dc=example,dc=ru
          EOF

На данном шаге, при обновлении только пароля существующей системной УЗ, необходимо выполнить команду:

.. code-block:: bash

  ldapmodify -x -D "cn=Directory Manager" -W <<EOF
  dn: uid=<system_account>,cn=sysaccounts,cn=etc,dc=example,dc=ru
  changetype: modify
  replace: userPassword
  userPassword: <newPassword>
  EOF

При обновлении УЗ **Syncer** необходимо дополнительно актуализировать пароль для подключения к контроллеру **ALD** во вкладке: **Модуль синхронизации / Настройки / Контроллеры домена ALD**.

Далее необходимо преобразовать пароль для корректного хранения в файлах конфигурации.

Скачать публичный ключ:

.. code-block:: bash

  aldpro-salt-call aldpro_subsystems.get_crt_pass_to_fs /tmp/test_cert.crt

где ``/tmp/test_cert.crt`` абсолютный путь до ключа.

Преобразовать пароль:

.. code-block:: bash

  aldpro-salt-call aldpro_subsystems.password_encrypt '<PASSWORD>' public_cert_path=/tmp/test_cert.crt

Актуализировать учетные данные в ключах ``username`` и ``password`` записи обновляемого КД, в случае обновления ``simple_repo`` - на сервере репозиториев, ``DN: fqdn=<fqdn>,cn=computers,cn=accounts,dc=example,dc=ru`` в атрибуте ``aldproSubsystemVaultCredentials``. Например, для ``roleservice`` файл конфигурации будет выглядеть следующим образом:

.. code-block:: bash

  {
      "passwords": {
          "roleservice": {
              "group": "roleservice",
              "password": "roleserviceEncryptPassword",
              "simple_bind": true,
              "username": "new_roleservice"
          }
      }
  }

Обновить значения ключей ``username`` и ``password`` в ``/etc/aldpro-salt/stack/encrypted_passwords.yml`` на КД, а в случае обновления ``simple_repo`` - на сервере репозиториев. Например, для ``roleservice`` файл конфигурации будет выглядеть следующим образом:

.. code-block:: bash

  roleservice:
  group: roleservice
  password: roleserviceEncryptPassword
  simple_bind: true
  username: new_roleservice

Заменить учетные данные в файлах конфигурации:

.. list-table::
   :header-rows: 1
   :widths: 30 10 30 30
   :class: longtable

   * - Системная УЗ
     - Подсистема
     - Файл конфигурации
     - Переменные
   * - ::
    
        uid=orgunitsservice_*,cn=sysaccounts,cn=etc,$SUFFIX
     - КД
     - ::
   
        /etc/aldpro/core.env
     - :: 

        ORGUNITS_MOVE_SYSACCOUNT_USER
        ORGUNITS_MOVE_SYSACCOUNT_PASSWORD

   * - ::
    
        uid=roleservice_*,cn=sysaccounts,cn=etc,$SUFFIX
     - КД
     - ::
   
        /etc/aldpro/core.env
     - :: 

        ROLESERVICE_USERNAME
        ROLESERVICE_PASSWORD
   * - ::
    
        uid=saltstackservice_*,cn=sysaccounts,cn=etc,$SUFFIX
     - КД
     - ::
   
        /etc/aldpro/core.env
     - :: 

        LDAP_USER
        LDAP_PASSWORD
   * - ::
    
        uid=trustsservice_*,cn=sysaccounts,cn=etc,$SUFFIX
     - КД
     - ::
   
        /etc/aldpro/core.env
     - :: 

        TRUSTS_SYSACCOUNT_USER
        TRUSTS_SYSACCOUNT_PASSWORD
   * - ::
    
        uid=syncer/{domain}@{REALM},cn=sysaccounts,cn=etc,$SUFFIX
     - КД
     - ::
   
        /etc/aldpro/core.env
     - :: 

        SYNCER_ALDPRO_LOGIN
        SYNCER_ALDPRO_PASSWD

Удалить устаревшую УЗ:

.. code-block:: bash

  ldapdelete -x -D "cn=Directory Manager" -W "uid=<system_account>,cn=sysaccounts,cn=etc,dc=example,dc=ru"

Блокировка системных УЗ для работы с LDAP
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Блокировка УЗ **389 DS** выполняется посредством добавления атрибута ``nsAccountLock``, который обеспечивает блокировку прохождения аутентификации с **LDAP**-сервером. Для добавления атрибута необходимо выполнить команду:

.. code-block:: bash

  ldapmodify -x -D "cn=Directory Manager" -W <<EOF
  dn: uid=<system_account>,cn=sysaccounts,cn=etc,dc=example,dc=ru
  changetype: modify
  add: nsAccountLock
  nsAccountLock: FALSE
  EOF

где:

1. ``<system_account>`` — имя существующей системной учетной записи в дереве ``cn=sysaccounts``;
2. ``dc=example,dc=ru`` — доменная компонента.

Добавление атрибута для соответствующей УЗ происходит единожды, далее значение атрибута возможно к изменению согласно предполагаемым сценариям:

- для блокировки значение ``nsAccountLock`` устанавливается в TRUE;
- для разблокировки значение ``nsAccountLock`` устанавливается в FALSE.

Для возможности изменить атрибут необходимо выполнить команду:

.. code-block:: bash

  ldapmodify -x -D "cn=Directory Manager" -W <<EOF
  dn: uid=<system_account>,cn=sysaccounts,cn=etc,dc=example,dc=ru
  changetype: modify
  replace: nsAccountLock
  nsAccountLock: FALSE
  EOF

``nsAccountLock: <TRUE/FALSE>`` изменяется согласно указанным ранее сценариям. 

После выполнения блокировки УЗ выполнение подключений сервисов, использующих УЗ, станет недоступно. В портале при подобных ограничениях будут получены ошибки, обозначающие невозможность соответствующими сервисами и скриптами выполнять аутентификацию под указанной УЗ.

Управление системными учетными записями PostgreSQL
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Переопределение системных УЗ для работы с PostgreSQL
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

В процессе обновления учетных данных для системных учетных записей, использующихся в функционировании **PostgreSQL**, необходимо провести актуализацию непосредственно в СУБД на тех подсистемах, где требуется обновление. Для переопределения необходимо создать системную УЗ на замену:

.. list-table::
   :header-rows: 1
   :widths: 15 15 10 60
   :class: longtable

   * - Системная УЗ
     - Подсистема
     - База данных
     - Создание УЗ для замены
   * - async_db_*
     - КД
     - async
     - :: 

        sudo -u postgres psql -c "CREATE USER <user> WITH PASSWORD 'pass';"
        sudo -u postgres psql -d <database> -c "REASSIGN OWNED BY <old_user> TO <new_user>;"
        sudo -u postgres psql -d <database> -c "DROP OWNED BY <old_user>;"

   * - core_db_*
     - КД
     - core
     - :: 

        sudo -u postgres psql -c "CREATE USER <user> WITH PASSWORD 'pass';"
        sudo -u postgres psql -d <database> -c "REASSIGN OWNED BY <old_user> TO <new_user>;"
        sudo -u postgres psql -d <database> -c "DROP OWNED BY <old_user>;"
            
   * - syncer_db_*
     - КД
     - syncer
     - :: 

        sudo -u postgres psql -c "CREATE USER <user> WITH PASSWORD 'pass';"
        sudo -u postgres psql -d <database> -c "REASSIGN OWNED BY <old_user> TO <new_user>;"
        sudo -u postgres psql -d <database> -c "DROP OWNED BY <old_user>;"
            
   * - repo_db_*
     - Репозитории ПО
     - repo
     - :: 

        sudo -u postgres psql -c "CREATE USER <user> WITH PASSWORD 'pass';"
        sudo -u postgres psql -d <database> -c "REASSIGN OWNED BY <old_user> TO <new_user>;"
        sudo -u postgres psql -d <database> -c "DROP OWNED BY <old_user>;"
            
   * - osinstall_db_*
     - Установка ОС по сети
     - osinstall
     - :: 

        sudo -u postgres psql -c "CREATE USER <user> WITH PASSWORD 'pass';"
        sudo -u postgres psql -d <database> -c "REASSIGN OWNED BY <old_user> TO <new_user>;"
        sudo -u postgres psql -d <database> -c "DROP OWNED BY <old_user>;"

На данном шаге, при обновлении только пароля существующей системной УЗ, необходимо выполнить команду:

.. code-block:: bash

  sudo -u postgres psql -d <database> -c "ALTER USER <username> WITH PASSWORD '<new_password>';"

Далее необходимо преобразовать пароль для корректного хранения в файлах конфигурации.

Скачать публичный ключ:

.. code-block:: bash

  aldpro-salt-call aldpro_subsystems.get_crt_pass_to_fs /tmp/test_cert.crt

где ``/tmp/test_cert.crt`` абсолютный путь до ключа.

Преобразовать пароль:

.. code-block:: bash

   aldpro-salt-call aldpro_subsystems.password_encrypt '<PASSWORD>' public_cert_path=/tmp/test_cert.crt

Актуализировать учетные данные в ключе ``password`` записи обновляемой подсистемы DN: ``fqdn=<fqdn>,cn=computers,cn=accounts,dc=example,dc=ru`` в атрибуте ``aldproSubsystemVaultCredentials``. Учетные записи **PostgreSQL** отражены в ключах ``postgres_<short_system_account_name>``. Например, для ``core_db_*`` файл конфигурации будет выглядеть следующим образом:

.. code-block:: bash

  {
      "passwords": {
           "postgres_core": {
              "db_password": "<coreDbEncryptPassword>"
          }
      }
  } 

Обновить значения ключа ``password`` в ``/etc/aldpro-salt/stack/encrypted_passwords.yml``. Например, для ``core_db_*`` файл конфигурации будет выглядеть следующим образом:

.. code-block:: bash

  postgres_core:
    db_password: <coreDbEncryptPassword>


Заменить учетные данные в файлах конфигурации:

.. list-table::
   :header-rows: 1
   :widths: 30 10 30 30
   :class: longtable

   * - Системная УЗ
     - Подсистема
     - Файл конфигурации
     - Переменные
   * - async_db_*
     - КД
     - ::
   
        /etc/aldpro/services.env
     - :: 

        ASYNC_DB_USER
        ASYNC_DB_PASSWORD

   * - core_db_*
     - КД
     - ::
   
        /etc/aldpro/core.env
     - :: 

        CORE_DB_USER
        CORE_DB_PASSWORD

   * - syncer_db_*
     - КД
     - ::
   
        /etc/aldpro/core.env /etc/aldpro/syncer.env
     - :: 

        SYNCER_DB_USER
        SYNCER_DB_PASSWORD
   * - repo_db_*
     - Репозитории ПО
     - ::
   
        /etc/aldpro/repo.env
     - :: 

        DB_USER
        DB_PASSWORD

   * - osinstall_db_*
     - Установка ОС по сети
     - ::
   
        /etc/aldpro/os.env
     - :: 

        POSTGRES_USER
        POSTGRES_PASSWORD

Удалить устаревшую УЗ:

.. code-block:: bash

  sudo -u postgres psql -d <database> -c "DROP ROLE <user>;"

Блокировка системных УЗ для работы с PostgreSQL
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Блокировка системных УЗ осуществляется средствами **PostgreSQL**:

.. list-table::
   :header-rows: 1
   :widths: 15 15 35 35
   :class: longtable

   * - Системная УЗ
     - Подсистема
     - Блокировка
     - Разблокировка
   * - async
     - КД
     - NOLOGIN позволяет заблокировать пользователя

        .. code-block:: bash

          sudo -u postgres psql -c "ALTER USER <username> NOLOGIN;"

     - LOGIN позволяет разблокировать пользователя

        .. code-block:: bash

          sudo -u postgres psql -c "ALTER USER <username> LOGIN;"
          
   * - core
     - КД
     - NOLOGIN позволяет заблокировать пользователя

        .. code-block:: bash

          sudo -u postgres psql -c "ALTER USER <username> NOLOGIN;"

     - LOGIN позволяет разблокировать пользователя

        .. code-block:: bash

          sudo -u postgres psql -c "ALTER USER <username> LOGIN;"

   * - syncer
     - КД
     - NOLOGIN позволяет заблокировать пользователя

        .. code-block:: bash

          sudo -u postgres psql -c "ALTER USER <username> NOLOGIN;"

     - LOGIN позволяет разблокировать пользователя

        .. code-block:: bash

          sudo -u postgres psql -c "ALTER USER <username> LOGIN;"

   * - repo
     - Репозитории ПО
     - NOLOGIN позволяет заблокировать пользователя

        .. code-block:: bash

          sudo -u postgres psql -c "ALTER USER <username> NOLOGIN;"

     - LOGIN позволяет разблокировать пользователя

        .. code-block:: bash

          sudo -u postgres psql -c "ALTER USER <username> LOGIN;"
          
   * - osinstall
     - Установка ОС по сети
     - NOLOGIN позволяет заблокировать пользователя

        .. code-block:: bash

          sudo -u postgres psql -c "ALTER USER <username> NOLOGIN;"

     - LOGIN позволяет разблокировать пользователя 

        .. code-block:: bash

          sudo -u postgres psql -c "ALTER USER <username> LOGIN;"
          
Управление системными учетными записями RabbitMQ, используемыми для работы ALD Pro
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Переопределение системных УЗ для работы с RabbitMQ
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

В процессе обновления учетных данных для системных учетных записей, использующихся в функционировании **RabbitMQ**, необходимо провести актуализацию непосредственно в системе управления очередями на тех подсистемах, где требуется обновление. Для этого следует воспользоваться следующими командами:

.. list-table::
   :header-rows: 1
   :widths: 20 20 40
   :class: longtable

   * - Системная УЗ
     - Подсистема
     - Создание новой УЗ
   * - async_rabbitmq_*
     - КД
     - Создать нового пользователя:

        .. code-block:: bash

          rabbitmqctl add_user <username> <password>

       Присвоить роль администратора:

        .. code-block:: bash

          rabbitmqctl set_user_tags <username> administrator

       Выделить права:

        .. code-block:: bash

          rabbitmqctl set_permissions -p <vhost> <username> ".*" ".*" ".*"
      
       -p значение VHOST из файлов переменных *.env
   * - core_rabbitmq_*
     - КД
     - Создать нового пользователя:

        .. code-block:: bash

          rabbitmqctl add_user <username> <password>

       Присвоить роль администратора:

        .. code-block:: bash

          rabbitmqctl set_user_tags <username> administrator

       Выделить права:

        .. code-block:: bash

          rabbitmqctl set_permissions -p <vhost> <username> ".*" ".*" ".*"
      
       -p значение VHOST из файлов переменных *.env
   * - repo_rabbitmq_*
     - Репозитории ПО
     - Создать нового пользователя:

        .. code-block:: bash

          rabbitmqctl add_user <username> <password>

        Присвоить роль администратора:

        .. code-block:: bash

          rabbitmqctl set_user_tags <username> administrator

       Выделить права:

        .. code-block:: bash

          rabbitmqctl set_permissions -p <vhost> <username> ".*" ".*" ".*"
      
       -p значение VHOST из файлов переменных *.env
   * - osinstall_rabbitmq_*
     - Установка ОС по сети
     - Создать нового пользователя:

        .. code-block:: bash

          rabbitmqctl add_user <username> <password>

       Присвоить роль администратора:

        .. code-block:: bash

          rabbitmqctl set_user_tags <username> administrator

       Выделить права:

        .. code-block:: bash

          rabbitmqctl set_permissions -p <vhost> <username> ".*" ".*" ".*"
      
       -p значение VHOST из файлов переменных *.env

На данном шаге, при обновлении только пароля существующей системной УЗ, необходимо выполнить команду:

.. code-block:: bash

  rabbitmqctl change_password <system_account> <newpassword>

Далее необходимо преобразовать пароль для корректного хранения в файлах конфигурации.

Скачать публичный ключ:

.. code-block:: bash

  aldpro-salt-call aldpro_subsystems.get_crt_pass_to_fs /tmp/test_cert.crt

где ``/tmp/test_cert.crt`` абсолютный путь до ключа.

Преобразовать пароль:

.. code-block:: bash

  aldpro-salt-call aldpro_subsystems.password_encrypt '<PASSWORD>' public_cert_path=/tmp/test_cert.crt

Актуализировать учетные данные в ключе ``password`` записи обновляемой подсистемы ``DN: fqdn=<fqdn>,cn=computers,cn=accounts,dc=example,dc=ru`` в атрибуте ``aldproSubsystemVaultCredentials``. Учетные записи **RabbitMQ** отражены в ключах ``rabbitmq_<short_system_account_name>``. Например, для ``core_rabbitmq_*`` файл конфигурации будет выглядеть следующим образом:

.. code-block:: bash

  {
    "passwords": {
        "rabbitmq_core": {
            "db_password": "<coreRabbitmqEncryptPassword>"
        }
    }
  }

Обновить значения ключа ``password`` в ``/etc/aldpro-salt/stack/encrypted_passwords.yml``. Например, для ``core_rabbitmq_*`` файл конфигурации будет выглядеть следующим образом:

.. code-block:: bash

  rabbitmq_core:
   db_password: <coreRabbitmqEncryptPassword>

Актуализировать учетные данные в файлах конфигурации:

.. list-table::
   :header-rows: 1
   :widths: 20 20 30 30
   :class: longtable

   * - Системная УЗ
     - Подсистема
     - Файл конфигурации
     - Переменные
   * - async
     - КД
     -  :: 

        /etc/aldpro/services.env
     - :: 

        ASYNC_RABBIT_LOGIN
        ASYNC_RABBIT_PASSWORD

   * - core
     - КД
     -  :: 

        /etc/aldpro/core.env
     - :: 

        CELERY_RABBIT_USER
        CELERY_RABBIT_PASSWORD

   * - repo
     - Репозитории ПО
     -  :: 

        /etc/aldpro/repo.env
     - :: 

        CELERY_RABBIT_USER
        CELERY_RABBIT_PASSWORD
   * - osinstall
     - Установка ОС по сети
     -  :: 

        /etc/aldpro/os.env
     - :: 

        CELERY_RABBIT_USER
        CELERY_RABBIT_PASSWORD

Удалить устаревшую УЗ:

.. code-block:: bash

  rabbitmqctl delete_user <system_account>

Блокировка системных УЗ для работы с RabbitMQ
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Механизм блокировки учетных записей (УЗ) в среде **RabbitMQ** реализуется посредством встроенных функциональных возможностей самой службы обмена сообщениями. Эта процедура осуществляется путем взаимодействия с командным интерфейсом, доступным в **RabbitMQ**. Пользовательские учетные записи, созданные внутри системы, обладают определенными правами доступа и полномочиями, определяющими уровень привилегий для выполнения операций в брокере сообщений, при выполнении процедуры блокировки соответствующие разрешения и полномочия учетной записи аннулируются, что фактически лишает пользователя способности взаимодействовать с сервисом, выполняя запланированные действия.

.. list-table::
   :header-rows: 1
   :widths: 15 15 35 35
   :class: longtable

   * - Системная УЗ
     - Подсистема
     - Блокировка
     - Разблокировка
   * - async
     - КД
     - Команда ``clear_permissions`` инструктирует брокера **RabbitMQ** запретить пользователю доступ к указанному виртуальному хосту
     
        .. code-block:: bash

          rabbitmqctl clear_permissions -p <vhost> <system_account>

       -p значение VHOST из файлов переменных *.env

     - :: 

        rabbitmqctl set_permissions -p <vhost> <system_account> ".*" ".*" ".*"
   * - core
     - КД
     - Команда ``clear_permissions`` инструктирует брокера **RabbitMQ** запретить пользователю доступ к указанному виртуальному хосту
     
        .. code-block:: bash

          rabbitmqctl clear_permissions -p <vhost> <system_account>

       -p значение VHOST из файлов переменных *.env

     - :: 

        rabbitmqctl set_permissions -p <vhost> <system_account> ".*" ".*" ".*"
   * - repo
     - Репозитории ПО
     - Команда ``clear_permissions`` инструктирует брокера **RabbitMQ** запретить пользователю доступ к указанному виртуальному хосту
     
        .. code-block:: bash

          rabbitmqctl clear_permissions -p <vhost> <system_account>

       -p значение VHOST из файлов переменных *.env

     - :: 

        rabbitmqctl set_permissions -p <vhost> <system_account> ".*" ".*" ".*"
   * - osinstall
     - Установка ОС по сети
     - Команда ``clear_permissions`` инструктирует брокера **RabbitMQ** запретить пользователю доступ к указанному виртуальному хосту
     
        .. code-block:: bash

          rabbitmqctl clear_permissions -p <vhost> <system_account>

       -p значение VHOST из файлов переменных *.env

     - :: 

        rabbitmqctl set_permissions -p <vhost> <system_account> ".*" ".*" ".*"

Управление системными учетными записями Zabbix и Grafana
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Переопределение системных УЗ для работы с Zabbix и Grafana
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

В процессе обновления учетных данных для системных учетных записей, использующихся в функционировании **Zabbix** и **Grafana**, необходимо провести актуализацию непосредственно в системе мониторинга на тех подсистемах, где требуется обновление. Для переопределения monitoring_* или zabbix_api_* необходимо создать системную УЗ на замену, воспользовавшись веб-интерфейсом **Zabbix**:

.. figure:: images/pic1.png
   :name: pic1

На данном шаге, при обновлении только пароля существующей системной УЗ, необходимо выполнить команду обновления пароля в карточке пользователя:

.. figure:: images/pic2.png
   :name: pic2

Изменение учетных данных УЗ в **Grafana** осуществляется аналогично через веб-интерфейс:

.. figure:: images/pic3.png
   :name: pic3

Обновление или сброс пароля администратора **Grafana** можно выполнить с помощью команды, которая автоматизирует процесс изменения пароля во всех необходимых конфигурациях:

.. code-block:: bash

    grafana-cli admin reset-admin-password <new password>

Далее необходимо преобразовать пароль для корректного хранения в файлах конфигурации.

Скачать публичный ключ:

.. code-block:: bash

    aldpro-salt-call aldpro_subsystems.get_crt_pass_to_fs /tmp/test_cert.crt

где ``/tmp/test_cert.crt`` абсолютный путь до ключа.

Преобразовать пароль:

.. code-block:: bash

    aldpro-salt-call aldpro_subsystems.password_encrypt '<PASSWORD>' public_cert_path=/tmp/test_cert.crt

Актуализировать учетные данные в записи каталога обновляемой подсистемы:

.. list-table::
   :header-rows: 1
   :widths: 17 22 24 37
   :class: longtable

   * - Системная УЗ
     - DN
     - Атрибут
     - Ключ
   * - monitoring_*
     - :: 

        fqdn=<fqdn_dc>,cn=computers,cn=accounts,dc=example,dc=ru
     - :: 

        aldproSubsystem VaultCredentials (пробел удалить)
     - :: 

        zabbix_monitoring:password: <password>
        zabbix_monitoring:username: <username>

   * - monitoring_*
     - :: 

        fqdn=<fqdn_mon>,cn=computers,cn=accounts,dc=example,dc=ru
     - :: 

        rbtaSubsystemConfig
     - :: 

        monitoring_credentials:<monitoring_dc = username> 
        monitoring_credentials:<monitoring_dc = username>:password: <password>
        monitoring_credentials:<monitoring_dc = username>:username <username>
        monitoring_status:<monitoring_dc = username>

   * - zabbix_api_*	
     - :: 

        fqdn=<fqdn_mon>,cn=computers,cn=accounts,dc=example,dc=ru
     - :: 

        aldproSubsystem VaultCredentials (пробел удалить)
     - :: 

        zabbix_api:password: <password>

   * - admin (grafana)	
     - :: 

        fqdn=<fqdn_mon>,cn=computers,cn=accounts,dc=example,dc=ru
     - ::

        aldproSubsystem VaultCredentials (пробел удалить)
     - :: 

        grafana:password: <password>

Например, для ``monitoring_dc01`` конфигурация ``rbtaSubsystemConfig`` будет выглядеть следующим образом:

.. code-block:: bash

  {
      "is_master": true,
      "monitoring_credentials": {
          "new_monitoring_dc01": {
              "password": "newMonitoringDc01EncryptPassword",
              "username": "new_monitoring_dc01"
          }
      },
      "monitoring_status": {
          "new_monitoring_dc01": "True"
      },
      "timestamp": "timestamp",
      "version_ald": "3.2.0"
  }

Актуализировать учетные данные в файлах конфигурации:

.. list-table::
   :header-rows: 1
   :widths: 20 20 30 30
   :class: longtable

   * - Системная УЗ
     - Подсистема
     - Файл конфигурации
     - Переменные/Ключ
   * - monitoring_*
     - КД
     - ::

        /etc/aldpro/core.env
     - :: 

        ZABBIX_USERNAME

        ZABBIX_PSW

   * - monitoring_*
     - КД
     - ::

        /etc/aldpro-salt/stack/encrypted_passwords.yml
     - :: 

        zabbix_monitoring:password:

        zabbix_monitoring:username:

   * - zabbix_api_*	
     - Мониторинг
     - ::

        /etc/systemd/system/aldpro-zabbix-discovering-systemd.conf	
     - :: 

        ALDPRO_ZABBIX_PASSWORD

   * - zabbix_api_*	
     - Мониторинг
     - ::

        /etc/aldpro-salt/stack/encrypted_passwords.yml
     - :: 

        zabbix_api:password:

   * - zabbix_api_*	
     - Мониторинг
     - ::

        /etc/aldpro-salt/stack/aldpro_install.yml
     - :: 

        aldpro:subsystems:zab bix:zabbix_api:username: (пробел удалить)

Например, для ``monitoring_dc01`` файл конфигурации ``/etc/aldpro-salt/stack/encrypted_passwords.yml`` будет выглядеть следующим образом:

.. code-block:: bash

    zabbix_monitoring:
      password: newMonitoringDc01EncryptPassword
      simple_bind: true
      username: new_monitoring_dc01
      zabbix: true

Перезагрузить ``aldpro-salt-minion``:

.. code-block:: bash

  systemctl restart aldpro-salt-minion.service

Пересобрать конфигурацию pillar:

.. code-block:: bash

  aldpro-salt-call aldpro_subsystems.build_deploy_pillar -c /srv/aldpro-salt/config/

В случае обновления пароля учетной записи zabbix_api_*, которая необходима для интеграции **Grafana** с **Zabbix**, необходимо провести соответствующие изменения в конфигурации **Grafana**.

1. Перейти в раздел **Connections** (Подключения) и выбрать пункт **Data Sources** (Источники данных). В списке источников данных выбрать конфигурацию, связанную с **Zabbix**. Полный путь до раздела: **Home → Connections → Your → connections → Data sources → Zabbix**.
2. В настройках источника данных найти поле, предназначенное для хранения пароля пользователя **Zabbix**. Ввести новые учетные данные.
3. После обновления проверить и подтвердить корректность остальных параметров подключения. Нажать кнопку **[Save & Test]** (Сохранить и протестировать), чтобы проверить соединение с **Zabbix** и убедиться в правильности введённых данных.

.. figure:: images/pic4.png
   :name: pic4

В **Zabbix** авторизоваться под новой УЗ и удалить неактуальную:

.. figure:: images/pic5.png
   :name: pic5

Блокировка системных УЗ для работы с Zabbix и Grafana
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Блокировка УЗ **Zabbix** осуществляется через добавление пользователя в группу Disabled:

.. figure:: images/pic6.png
   :name: pic6

Блокировка УЗ в **Grafana** осуществляется через веб-интерфейс:

.. figure:: images/pic7.png
   :name: pic7

Генерация SECRET_KEY
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

В конфигурационных файлах **ALD Pro**, указанных выше, содержатся переменные ``SECRET_KEY``, представляющие собой ключи для Django, которые автоматически создаются модулями **ALD Pro**. Если возникает необходимость замены ключа, следует воспользоваться командой:

.. code-block:: bash
    
  aldpro-salt-call django_secret_key.generate

В файлах .env также хранится переменная ``NOTIFICATIONS_BASE64_PASSWORD``, необходимая для отображения иконки статуса "Связь установлена" на главной странице портала управления. Для генерации ``NOTIFICATIONS_BASE64_PASSWORD`` используется команда:

.. code-block:: bash
    
  aldpro-salt-call hashutil.base64_encodestring $(openssl rand -hex 28)

Новый пароль указывается в файлах ``/etc/aldpro/services.env`` и ``/etc/aldpro/core.env``. Генерация производится на каждом КД.

В конфигурационных файлах **ALD Pro** на подсистемах (``/etc/aldpro/repo.env`` и ``/etc/aldpro/os.env``) также содержатся переменные ``SECRET_KEY``, представляющие собой ключи для Django, которые автоматически создаются модулями **ALD Pro**. Если возникает необходимость замены ключа, следует воспользоваться командой:

.. code-block:: bash
    
  aldpro-salt-call django_secret_key.generate

Перезапуск затронутых сервисов ALD Pro и других приложений после смены учетных данных
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

После изменения пароля и обновления конфигураций приложений необходимо перезапустить:

- **FreeIPA** (**IPA** сервисы);
- **389 DS** (служба **LDAP**);
- службы репликации;
- сервисы, использующие **Kerberos** или **Sudo**;
- другие связанные сервисы и приложения.

На каждом контроллере домена выполнить:

.. code-block:: bash

  aldproctl restart

Для перезапуска репликации необходимо временно отключить соглашение о репликации:

.. code-block:: bash

  dsconf -D "cn=Directory Manager" ldap://server.example.com repl-agmt disable --suffix "dc=example,dc=com" example-agreement

Где ``example-agreement`` — наименование соглашения о репликации. Для получения необходимо выполнить команду:

.. code-block:: bash

  dsconf -j <INSTANCE> replication status --suffix dc=example,dc=com

``agmt-name`` будет соответствовать ``example-agreement``. Повторно включить соглашение о репликации, чтобы установить обновление:

.. code-block:: bash

  dsconf -D "cn=Directory Manager" ldap://server.example.com repl-agmt enable --suffix "dc=example,dc=com" example-agreement

Проверить статус репликации:

.. code-block:: bash

  dsconf -D "cn=Directory Manager" ldap://supplier.example.com repl-agmt status --suffix "dc=example,dc=com" example-agreement

Дополнительно:

.. code-block:: bash

  systemctl restart postgresql sssd apache2 rabbitmq-server

На сервере установки ОС:

.. code-block:: bash

  systemctl restart tftpd-hpa rabbitmq-server postgresql

На сервере репозиториев:

.. code-block:: bash

  systemctl restart rabbitmq-server postgresql

На сервере мониторинга:

.. code-block:: bash

  systemctl restart zabbix-server.service grafana-server.service postgresql apache2

После смены пароля и перезапуска репликации убедиться, что синхронизация данных между репликами работает корректно. Например, создать произвольную запись (нового пользователя) на одном сервере и проверить, что эта же запись появилась на других репликах.

Также рекомендуется произвести перезапуск сторонних служб, не являющихся частью **ALD Pro**, которые задействовали системные учетные записи.
